
import '../event/inventory_event.dart';
import '../log/logger_manager.dart';
import '../main.dart';

class AnalysisHelper{
  
  String result = "";
  bool isAnalyze = false;


  dataReceived(hexString){

    result += hexString;
    print('result=$result');
    LoggerManager().write("result=", '$result\n');

    // //start
    // if(result.length >= 20 && result.substring(2,10) == "00010210"){
    //   result = result.substring(20);
    //   return;
    // }
    //
    // //stop
    // if(result.length >= 20 && result.substring(2,10) == "000102FF"){
    //   result = result.substring(20);
    //   return;
    // }
    // //end
    // if(result.length >= 20 && result.substring(2,10) == "00011201"){
    //   result = result.substring(20);
    //   return;
    // }

    // if(result.length >= 14 && (result.substring(2,10) == "00011200" || result.substring(2,10) == "00011201")){
    //   analyze();
    //   return;
    // }



    if(result.contains('5A00011200')){
      var index = result.indexOf('5A00011200');
      result = result.substring(index);
      analyze();
      return;
    }

    if(!result.startsWith('5A00011200')){
      result = result.substring(10);
      var index = result.indexOf('5A');
      result = result.substring(index);
      return;
    }

    if(!result.startsWith('5A')){
      var index = result.indexOf('5A');
      result = result.substring(index);
      return;
    }

    // //analyze
    // if(result.length >= 14 && (result.substring(2,10) == "00011200" || result.substring(2,10) == "00011201" || result.substring(2,10) == "00010210"
    //     || result.substring(2,10) == "000102FF" || result.substring(2,10) == "00011100"|| result.substring(2,10) == "00011101")){
    //   analyze();
    //   return;
    // }

  }

  analyze(){
    print('result = $result');
    LoggerManager().write("result=", '$result\n');

    if(isAnalyze){
      return;
    }
    isAnalyze = true;
    // //开始
    // if(result.length >= 20 && result.substring(2,10) == "00010210"){
    //   isAnalyze = false;
    //   result = result.substring(20);
    //   if(result.isNotEmpty){
    //     analyze();
    //   }
    //   return;
    // }
    // //空闲
    // if(result.length >= 20 && result.substring(2,10) == "000102FF"){
    //   isAnalyze = false;
    //   result = result.substring(20);
    //   if(result.isNotEmpty){
    //     analyze();
    //   }
    //   return;
    // }
    // //end
    // if(result.length >= 20 && result.substring(2,10) == "00011201"){
    //   isAnalyze = false;
    //   result = result.substring(20);
    //   if(result.isNotEmpty){
    //     analyze();
    //   }
    //   return;
    // }
    // //空
    // if(result.length >= 20 && (result.substring(2,10) == "00011100" || result.substring(2,10) == "00011101")){
    //   isAnalyze = false;
    //   result = result.substring(38);
    //   if(result.isNotEmpty){
    //     analyze();
    //   }
    //   return;
    // }

    if(result.length>=14 && result.substring(2,10) == "00011200"){
      var dataLength =  int.parse(result.substring(12,14),radix: 16);
      var length = 14+dataLength*2+4;
      if(result.length>=length){
        var len = int.parse(result.substring(16,18),radix: 16);
        String? epc = result.substring(18,18+len*2);
        isAnalyze = false;
        result = result.substring(length);
        eventFactory.fire(InventoryEvent(epc));

        if(result.isNotEmpty){
          analyze();
        }
      }else{
        isAnalyze = false;
      }
    }else{
      isAnalyze = false;
    }
  }
  //5A000112000018000CB01202000101020200000000300001010508000DCA46046E
  clear(){
    if(result.isNotEmpty){
      LoggerManager().write("clearResult=", '$result\n');
    }
    result = '';
  }
}